package jmine.tec.report.api.batch;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

import jmine.tec.report.api.Report;
import jmine.tec.utils.Tuple;

/**
 * Interface que deve ser implementada por objetos que criam relatórios baseados no recebimento de um objeto de tipo P utilizado como
 * parâmetro.<br/>
 * <br/>
 * 
 * @author lundberg
 * @param <P> tipo de objeto utilizado como parâmetro para criação do relatório
 */
public interface ReportCreator<P> extends Comparable<ReportCreator<?>> {

    /**
     * Cria relatórios baseados nos parâmetros e devolve inputstreams dos conteúdos dos relatórios
     * 
     * @param parameter parameter
     * @return tupla de relatórios gerados
     * @throws IOException IOException
     */
    List<Tuple<String, InputStream>> createReportFiles(P parameter) throws IOException;

    /**
     * Cria os relatórios baseados nos parâmetros e devolve o model
     * 
     * @param parameter parameter
     * @return List de Report
     */
    List<Report> createReports(P parameter);

    /**
     * Instancia o parâmetro que deve ser preenchido para criação do relatório
     * 
     * @return parâmetro
     */
    P createParameter();

    /**
     * Retorna o nome que descreve este creator
     * 
     * @return string
     */
    String getCreatorKey();
}
